import OpenAI from "openai";
import type { NextApiRequest, NextApiResponse } from "next";

/**
 * This file demonstrates how to stream from a Next.JS server as
 * a new-line separated JSON-encoded stream. This file cannot be run
 * without Next.JS scaffolding.
 *
 * This endpoint can be called with:
 *
 *   curl 127.0.0.1:3000 -N -X POST -H 'Content-Type: text/plain' \
 *     --data 'Can you explain why dogs are better than cats?'
 *
 * Or consumed with fetch:
 *
 *   fetch('http://localhost:3000', {
 *     method: 'POST',
 *     body: 'Tell me why dogs are better than cats',
 *   }).then(async res => {
 *     const runner = ChatCompletionStreamingRunner.fromReadableStream(res)
 *   })
 *
 * See examples/stream-to-client-browser.ts for a more complete example.
 */

export const runtime = "edge";
export default async function handler(
  req: NextApiRequest,
  res: NextApiResponse
) {
  const openai = new OpenAI();

  const stream = openai.chat.completions.stream({
    model: "gpt-3.5-turbo",
    stream: true,
    // @ts-ignore
    messages: [{ role: "user", content: await req.text() }],
  });

  return new Response(stream.toReadableStream());
}

